package com.demo.jzoffer2;

import com.demo.domain.TreeNode;
import org.junit.Test;

/**
 * @author gy
 * @date 2022/11/15
 */
public class Test1206_01 {

    /**
     * 请完成一个函数，输入一个二叉树，该函数输出它的镜像。
     * 这是一道很经典的二叉树问题。显然，我们从根节点开始，递归地对树进行遍历，并从叶子节点先开始翻转得到镜像。
     * 如果当前遍历到的节点 root的左右两棵子树都已经翻转得到镜像，
     * 那么我们只需要交换两棵子树的位置，即可得到以 root
     * 为根节点的整棵子树的镜像。
     * @param root
     * @return
     */
    public TreeNode mirrorTree(TreeNode root) {
        // 思路分析：将二叉树转换成 带有root节点的两个左右子树
        // 我们需要完成左右两颗子树的翻转
        // dfs两颗子树，递归结束条件，root节点为null
        if (root == null){
            return null;
        }
        // 左子树的结果给到root.right
        TreeNode leftRes = mirrorTree(root.left);
        // 右子树的结果给到root.left
        TreeNode rightRes = mirrorTree(root.right);
        root.right = leftRes;
        root.left = rightRes;
        return root;
    }

    @Test
    public void m1() {

    }

}
